import datetime
from apps.extensions import db

class Comment(db.Model):
    """
    评论模型
    用于存储文章下的用户评论，支持多级回复、状态管理、关联用户和文章。
    字段说明：
      - id: 主键，自增ID
      - author: 评论作者名称
      - email: 作者邮箱
      - url: 作者个人网站
      - ip: 评论时IP地址
      - content: 评论内容
      - status: 评论状态（pending待审、approved已批准、spam垃圾、trash回收站）
      - article_id: 所属文章ID
      - user_id: 关联用户ID（如为注册用户）
      - parent_id: 父评论ID（支持多级回复）
      - created_at: 创建时间
      - updated_at: 更新时间
      - deleted: 是否删除（软删除标记）
    关系说明：
      - article: 关联的文章对象
      - user: 关联的用户对象
      - parent: 父评论对象
      - children: 子评论集合
    """
    __tablename__ = 'cms_comment'
    
    id = db.Column(db.Integer, primary_key=True)  # 主键
    author = db.Column(db.String(100), nullable=False)  # 评论作者
    email = db.Column(db.String(120))  # 作者邮箱
    url = db.Column(db.String(255))  # 作者个人网站
    ip = db.Column(db.String(45))  # 评论IP
    content = db.Column(db.Text, nullable=False)  # 评论内容
    status = db.Column(db.String(20), default='pending')  # 评论状态: pending待审, approved已批准, spam垃圾, trash回收站
    article_id = db.Column(db.Integer, db.ForeignKey('cms_post.id'))  # 所属文章ID
    user_id = db.Column(db.Integer, db.ForeignKey('sys_user.id'))  # 关联用户ID
    parent_id = db.Column(db.Integer, db.ForeignKey('cms_comment.id'))  # 父评论ID
    created_at = db.Column(db.DateTime, default=datetime.datetime.now)  # 创建时间
    updated_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now)  # 更新时间
    deleted = db.Column(db.Boolean, default=False)  # 是否删除
    
    # 关系定义
    article = db.relationship('Post', backref='comments')
    user = db.relationship('User', backref='comments')
    parent = db.relationship('Comment', remote_side=[id], backref='children')
    
    def __repr__(self):
        return f'<Comment {self.id}: {self.author}>'
    
    def to_dict(self):
        """转换为字典格式"""
        return {
            'id': self.id,
            'author': self.author,
            'email': self.email,
            'url': self.url,
            'ip': self.ip,
            'content': self.content,
            'status': self.status,
            'article_id': self.article_id,
            'user_id': self.user_id,
            'parent_id': self.parent_id,
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None,
            'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.updated_at else None,
            'deleted': self.deleted
        }

